//
// Created by Axe on 2024/3/12.
//

#include <string>
#include <list>
#include <map>
#include <vector>

#ifndef CPLUSSTUDY_STUDENT_H
#define CPLUSSTUDY_STUDENT_H


class Student {
private:
    int age;
    std::string name;
    std::string hobby[5];
    std::list<int> allInt;
    std::map<int,std::string> score;
    std::vector<std::string> otherStr;

public:
    /**
     * 基本构造函数，不带任何参数
     */
    Student();

    /**
     * 带参数的构造函数
     * @param age age
     * @param name name
     * @param hobby hobby
     * @param allInt allInt
     * @param score score
     */
    Student(int age, std::string name,std::string hobby[], std::list<int> allInt, std::map<int,std::string> score);

    /**
     * 拷贝构造函数
     * @param other
     */
    Student(const Student& other) {
        this->age = other.age;
        this->name = other.name;
        this->otherStr = other.otherStr;
        this->allInt = other.allInt;
        // 赋值hobby
        for (int i = 0; i < other.hobby->size(); ++i) {
            this->hobby[i] = other.hobby[i];
        }
        this->score = other.score;
    }

    /**
     * 析构函数
     */
    ~Student();

    /**
     * 获取学生的年龄
     * @return
     */
    int getAge() const;

    /**
     * 获取名字
     * @return
     */
    std::string getName() const;

    /**
     * 获取hobby
     * @return
     */
    std::string * getHobby();

    /**
     * 获取allint
     * @return
     */
    std::list<int> getAllint();

    /**
     * 获取所以的socre
     * @return
     */
    std::map<int,std::string> getAllSocre();

    /**
     * 获取OtherStr
     * @return
     */
    std::vector<std::string> getOtherStr();


    /**
     * 设置 oherStr
     *
     * @param otherStr
     */
    void setOtherStr(std::vector<std::string> otherStr);

    /**
     * add otherStr
     * @param newStr
     */
    void addOtherStr(std::string newStr);
};


#endif //CPLUSSTUDY_STUDENT_H
